﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;

namespace CenyLetu
{
    public partial class Form1 : Form
    {


        Color invalidColor = Color.FromArgb(255, 102, 102);
        public Form1()
        {
            InitializeComponent();
            textCenaLetuLabel.Visible = false;
            cenaLetuLabel.Visible = false;

            naletanoTextBox.Text = "30000";
            narozeniDenTextBox.Text = "14";
            narozeniMesicTextBox.Text = "10";
            narozeniRokTextBox.Text = "1962";
            hmotnostZavazadelTextBox.Text = "12";
            idLetuTextBox.Text = "32821";
            datumLetuDenTextBox.Text = "12";
            datumLetuMesicTextBox.Text = "2";
            datumLetuRokTextBox.Text = "2014";
            cenaLetuTextBox.Text = "6000";

        }

        private void buttonImport_Click(object sender, EventArgs e)
        {
            Log.DejInstanci().ZaznamLogu += new ZaznamLoguEventHandler(Form1_zaznamLogu);

            bool uspech = new ImportCen().Importuj();

            Log.DejInstanci().ZaznamLogu -= new ZaznamLoguEventHandler(Form1_zaznamLogu);
            listBoxLog.Items.Add("Import ukončen: " + (uspech ? "úspěšně" : "neúspěšně"));
        }

        void Form1_zaznamLogu(object sender, ZaznamLoguEventArgs args)
        {
            listBoxLog.Items.Add(args.Zaznam);
        }

        private void buttonvVypocitejCenu_Click(object sender, EventArgs e)
        {
            int pocetChyb = 0;
            cenaLetuLabel.Visible = false;
            textCenaLetuLabel.Visible = false;
            if (!validujCislo(naletanoTextBox, naletanoTextBox.Text)) pocetChyb++;
            if (!validujCislo(narozeniDenTextBox, narozeniDenTextBox.Text)) pocetChyb++;
            if (!validujCislo(narozeniMesicTextBox, narozeniMesicTextBox.Text)) pocetChyb++;
            if (!validujCislo(narozeniRokTextBox, narozeniRokTextBox.Text)) pocetChyb++;
            if (!validujCislo(hmotnostZavazadelTextBox, hmotnostZavazadelTextBox.Text)) pocetChyb++;
            if (!validujCislo(idLetuTextBox, idLetuTextBox.Text)) pocetChyb++;
            if (!validujCislo(datumLetuDenTextBox, datumLetuDenTextBox.Text)) pocetChyb++;
            if (!validujCislo(datumLetuMesicTextBox, datumLetuMesicTextBox.Text)) pocetChyb++;
            if (!validujCislo(datumLetuRokTextBox, datumLetuRokTextBox.Text)) pocetChyb++;
            if (!validujDecimal(cenaLetuTextBox, cenaLetuTextBox.Text)) pocetChyb++;

            if (pocetChyb > 0)
            {
                return;
            }

            Letenka letenka = new Letenka();
            Zakaznik zakaznik = null;
            try
            {
                zakaznik = new Zakaznik(new DateTime(int.Parse(narozeniRokTextBox.Text), int.Parse(narozeniMesicTextBox.Text), int.Parse(narozeniDenTextBox.Text)), int.Parse(naletanoTextBox.Text));
            }
            catch (ArgumentException ae)
            {
                this.setInvalidColor(narozeniRokTextBox);
                this.setInvalidColor(narozeniMesicTextBox);
                this.setInvalidColor(narozeniDenTextBox);
                return;
            }

            Let let = null;
            try
            {
                let = new Let(int.Parse(idLetuTextBox.Text), new DateTime(int.Parse(datumLetuRokTextBox.Text), int.Parse(datumLetuMesicTextBox.Text), int.Parse(datumLetuDenTextBox.Text)), decimal.Parse(cenaLetuTextBox.Text));
            }
            catch (ArgumentException ae)
            {
                this.setInvalidColor(datumLetuRokTextBox);
                this.setInvalidColor(datumLetuMesicTextBox);
                this.setInvalidColor(datumLetuDenTextBox);
                return;
            }
            
            letenka.VahaZavazadel = int.Parse(hmotnostZavazadelTextBox.Text);

            letenka.Let = let;
            letenka.zakaznik = zakaznik;
            Console.WriteLine("Cena: " + letenka.VypocitejCenu());
            cenaLetuLabel.Text = Math.Round(letenka.VypocitejCenu(), 2).ToString() + " Kč";
            cenaLetuLabel.Visible = true;
            textCenaLetuLabel.Visible = true;
        }

        private bool validujCislo(Control control, string text)
        {
            if (text.Length == 0)
            {
                this.setInvalidColor(control);
                return false;
            }
            int hodnota;
            if (!int.TryParse(text, out hodnota))
            {
                this.setInvalidColor(control);
                return false;
            }

            this.setValidColor(control);
            return true;
        }

        private bool validujDecimal(Control control, string text)
        {
            if (text.Length == 0)
            {
                this.setInvalidColor(control);
                return false;
            }
            decimal hodnota;
            if (!decimal.TryParse(text, out hodnota))
            {
                this.setInvalidColor(control);
                return false;
            }

            this.setValidColor(control);
            return true;
        }

        private void setInvalidColor(Control c)
        {
            c.BackColor = invalidColor;
        }

        private void setValidColor(Control c)
        {
            c.BackColor = SystemColors.Window;
        }

        private void textBox_TextChanged(object sender, EventArgs e)
        {
            Control c = (Control)sender;
            if (c.BackColor != SystemColors.Window)
            {
                this.setValidColor(c);
            }
        }

        private void textBox_Enter(object sender, EventArgs e)
        {
            TextBox c = (TextBox)sender;
            c.Select(0, c.Text.Length);
            Console.WriteLine(c.Text);
        }

        private void buttonRozesliNovinky_Click(object sender, EventArgs e)
        {
            Zakaznik zak1 = new Zakaznik("x@seznam.cz");
            Zakaznik zak2 = new Zakaznik("y@gmail.com");

            OdberNovinek odberNovinek = new OdberNovinek();

            InformacniBlok infoBlok = new InformacniBlok("predmet", "text info bloku");


            odberNovinek.RegistrujZak(zak1);
            odberNovinek.RegistrujZak(zak2);

            odberNovinek.RozesliNovinky(infoBlok);

            odberNovinek.OdregistrujZak(zak1);

            Console.WriteLine("------------------------------------------");
            Console.WriteLine("Odregistrace zak1 a znovu odeslání novinek");
            Console.WriteLine("------------------------------------------");

            

            odberNovinek.RozesliNovinky(infoBlok);



        }
    }
}
